home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / net / bind-contrib.tar.gz / bind-contrib.tar / contrib / msql / read_dnswalk < prev    next >
Text File  |  1996-10-25  |  3KB  |  117 lines

  1. #!/usr/local/bin/perl
  2. {
  3. use Msql;
  4.  
  5. $host = "";
  6. $dynamic = 0;
  7.  
  8. @namefile = ();
  9.  
  10. if ( @ARGV < 3 ) {
  11.     print "usage: read_dnswalk databasename domain filename [-hhost] [-sdynamic]\n";
  12.     exit(1);
  13. };
  14.  
  15. $dbname = shift;
  16. $domain = shift;
  17. $namefile = shift;
  18.  
  19. while (@ARGV) {
  20.     $ack = shift;
  21.     if ( $ack =~ m/^-h\S+/ ) {
  22.     ($host = $ack ) =~ s/^-h//;
  23.     };
  24.     if ( $ack =~ m/^-s\S+/ ) {
  25.     ($dynamic = $ack ) =~ s/^-s//;
  26.     };
  27. };
  28.  
  29. #print "gettoff: $dbname $domain $namefile $host $dynamic\n";
  30. #exit(1);
  31.  
  32. ($dbh = Connect Msql $host, $dbname)
  33.     or die("Can't connect: $Msql::db_errstr\n");
  34.  
  35. $stmt = "select dns_entry from control where one_row = 'A'";
  36. ($last = Query $dbh $stmt) or warn "Error $Msql::db_errstr\n$stmt\n";
  37. $id = $row[0] if (@row=$last->FetchRow());
  38.  
  39. $stmt = "select zoneid from msql_zones where name like '$domain%%'";
  40. ($last = Query $dbh $stmt) or warn "Error $Msql::db_errstr\n$stmt\n";
  41. $zone = $row[0] if (@row=$last->FetchRow());
  42.  
  43. $asstime = time();
  44. $domain =~ tr/A-Z/a-z/;
  45.  
  46. open(AXFR,"cat $namefile |") || die ("cat: $!\n");
  47. $foundpar=0;
  48. $readsoa=0;
  49. while ($string=<AXFR>){
  50.     chop($string);
  51.     $mbad = 0;
  52.     $mbad++ if ($string eq "");
  53.     $mbad++ if ($string =~ /^;/);
  54.     if (! $mbad ){
  55.     if ($foundpar){
  56.         ($junk, $num,$posspar, $junk ) = split(/\s+/,$string);
  57.         $soatable .= " $num";
  58.         if ("$posspar" eq ")"){
  59.         $foundpar = 0;
  60.         $soatable .= " )";
  61.         ($fqdn,$ttl,$type,$info) = split(/\s+/,$soatable,4);
  62.         };   
  63.     } else {
  64.         ($fqdn,$ttl,$type,$info) = split(/\s+/,$string,4);
  65.         if ($type =~ m/SOA/){
  66.         $foundpar++;
  67.         $soatable = "$fqdn $ttl $type $info";
  68.         } elsif ($fqdn eq ""){
  69.         $mbad++;
  70.         }
  71.     };
  72.     if (! $mbad  && !$foundpar) {
  73.         $fqdn =~ tr/A-Z/a-z/;
  74.         $import=0;
  75.         $gbad=0;
  76.         if ($type =~ m/NS/){ 
  77.         $gbad++ if ($fqdn !~ m/^$domain/);
  78.         };
  79.         if ($type =~ m/SOA/){ 
  80.         $gbad++ if ($readsoa);
  81.         };
  82.         if (! $gbad){
  83.         if ( $fqdn =~ m/^$domain/ ){
  84.             $hostname = "@";
  85.             if ($type =~ m/SOA/){ 
  86.             $readsoa++;
  87.             $import = 1;
  88.             };
  89.             $import = 2 if ($type =~ m/NS/);
  90.             $import = 3 if (! $import);
  91.         } else {
  92.             ($hostname, $junk) = split(/\./,$fqdn,2);
  93.             while ($junk !~ m/^$domain/ ){
  94.             ($tmp, $junk) = split(/\./,$junk,2);
  95.             $hostname .= ".$tmp";
  96.             };
  97.             $import = 4;
  98.         };
  99.         $id++;
  100.         $dynamic = 0 if !defined($dynamic);
  101.         ($info1,$info2) = split(/\t/,$info);
  102.         if ($info2 ne ""){
  103.             $info = "\"$info1\"\t\"$info2\"";
  104.         };
  105.         $stmt = "insert into msql_dns (dns_entry, zoneid, machine, class, type, info, assigned_time, importance, dynamic) values ( $id, $zone, '$hostname', 'IN', '$type', '$info',$asstime, $import, $dynamic)";
  106.         ($last = Query $dbh $stmt) or warn "Error $Msql::db_errstr\n$stmt\n";        
  107.         };
  108.     };
  109.     };
  110. };
  111. close(AXFR);
  112. $stmt = "update control set dns_entry = $id where one_row = 'A'";
  113. ($last = Query $dbh $stmt) or warn "Error $Msql::db_errstr\n$stmt\n";
  114.  
  115. }
  116.  
  117.